package com.flycent.hqhs.util;

import cn.sharesdk.sina.weibo.SinaWeibo;
import cn.sharesdk.tencent.qq.QQ;

import com.flycent.hqhs.UserBaseInfo;

import android.content.Context;
import android.content.SharedPreferences;

/**
 * 用户资料\数据工具类
 * <p>利用ShardPreferences存取用户的资料
 * </p>
 * 
 */
public class PreferenceUtil {
	// app 配置文件名
	private static final String prefName = "com.flycent.hqhs.prefs";
	
	/** 账户信息 */
	public static void setUser(Context context, UserBaseInfo user) {
		if (null == user) user = new UserBaseInfo();
		
		getPreference(context, prefName).edit()
			.putString("ID", user.getId())
			.putString("USERNAME", user.getUsername())
			.putString("PLAT", user.getPlatformName())
			.putString("USERPASS", user.getUserpass())
			.apply();
	}
	
	/** 账户信息 */
	public static UserBaseInfo getUser(Context context) {
		SharedPreferences prefs = getPreference(context, prefName);
		
		// 判断微博
		if (prefs.getString("PLAT", "").equals(SinaWeibo.class.getSimpleName()) && !new SinaWeibo(context).isValid()) {
			setUser(context, null);
			return null;
		}
		// 判断QQ
		if (prefs.getString("PLAT", "").equals(QQ.class.getSimpleName()) && !new QQ(context).isValid()) {
			setUser(context, null);
			return null;
		}
		
		return null == prefs.getString("ID", null) ? null : new UserBaseInfo(prefs.getString("ID", null), 
																						  prefs.getString("USERNAME", null),
																						  prefs.getString("USERPASS", null),
																						  prefs.getString("PLAT", null));		
	}
	
	
	
	//-----------------------------------------------------------
	
	/** 
	 * 由数据的key得到单个用户字符串数据
	 * 
	 * @param context 上下文对象,用以取得shardPreferences
	 * @param prefName shardPreferences文件名
	 * @param key 数据的键
	 * @return 一个字符串数据
	 */
	public static String getString(Context context, String key){
		return key == null ? null : getPreference(context, prefName).getString(key, null);
	}
	
	/** 
	 * 将用户字符串数据写入到sharePreferences中
	 * 
	 * @param context 上下文对象,用以取得shardPreferences
	 * @param prefName shardPreferences文件名
	 * @param key 数据的键
	 * @param value 数据的值
	 */
	public static void putString(Context context, String key, String value){
		if( key != null){
			getPreference(context, prefName).edit().putString(key, value).commit();
		}
	}
	
	/** 
	 * 由数据的key得到单个用户整型数据
	 * 
	 * @param context 上下文对象,用以取得shardPreferences
	 * @param prefName shardPreferences文件名
	 * @param key 数据的键
	 * @return
	 */
	public static int getInt(Context context, String key){
		return key == null ? 0 : getPreference(context, prefName).getInt(key, 0);
	}

	
	/** 
	 * 将用户整型数据写入到sharePreferences中
	 * 
	 * @param context 上下文对象,用以取得shardPreferences
	 * @param prefName shardPreferences文件名
	 * @param key 数据的键
	 * @param value 数据的值
	 */
	public static void putInt(Context context, String key, int value){
		if( key != null){
			getPreference(context, prefName).edit().putInt(key, value).commit();
		}
	}
	
	/** 
	 * 由数据的key得到单个用户长整型数据
	 * 
	 * @param context 上下文对象,用以取得shardPreferences
	 * @param prefName shardPreferences文件名
	 * @param key 数据的键
	 * @return
	 */
	public static long getLong(Context context, String key){
		return key == null ? 0 : getPreference(context, prefName).getLong(key, 0);
	}

	
	/** 
	 * 将长整型数据写入到sharePreferences中
	 * 
	 * @param context 上下文对象,用以取得shardPreferences
	 * @param prefName shardPreferences文件名
	 * @param key 数据的键
	 * @param value 数据的值
	 */
	public static void putLong(Context context, String key, long value){
		if( key != null){
			getPreference(context, prefName).edit().putLong(key, value).commit();
		}
	}
	
	/** 
	 * 由数据的key得到单个用户浮点型数据
	 * 
	 * @param context 上下文对象,用以取得shardPreferences
	 * @param prefName shardPreferences文件名
	 * @param key 数据的键
	 * @return 一个浮点型数据
	 */
	public static float getFloat(Context context, String key){
		return key == null ? 0 : getPreference(context, prefName).getFloat(key, 0F);
	}
	
	/** 
	 * 将用户浮点型数据写入到sharePreferences中
	 * 
	 * @param context 上下文对象,用以取得shardPreferences
	 * @param prefName shardPreferences文件名
	 * @param key 数据的键
	 * @param value 数据的值
	 */
	public static void putFloat(Context context, String key, float value){
		if( key != null){
			getPreference(context, prefName).edit().putFloat(key, value).commit();
		}
	}
	
	/** 
	 * 由数据的key得到单个用户布尔型数据
	 * 
	 * @param context 上下文对象,用以取得shardPreferences
	 * @param prefName shardPreferences文件名
	 * @param key 数据的键
	 * @return 一个布尔型数据
	 */
	public static boolean getBoolean(Context context, String key){
		return key == null ? false : getPreference(context, prefName).getBoolean(key, false);
	}

	
	/** 
	 * 将用户布尔型数据写入到sharePreferences中
	 * 
	 * @param context 上下文对象,用以取得shardPreferences
	 * @param prefName shardPreferences文件名
	 * @param key 数据的键
	 * @param value 数据的值
	 */
	public static void putBoolean(Context context, String key, boolean value){
		if( key != null){
			getPreference(context, prefName).edit().putBoolean(key, value).commit();
		}
	}
	
	/**
	 * 删除数据
	 * 
	 * @param context 上下文对象,用以取得shardPreferences
	 * @param prefName shardPreferences文件名
	 * @param key 数据的键
	 */
	public static void remove(Context context, String key){
		if( key != null){
			getPreference(context, prefName).edit().remove(key).commit();
		}
	}
	
	/**
	 * 清除文件中的所有内容
	 * 
	 * @param context 上下文对象,用以取得shardPreferences
	 * @param prefName shardPreferences文件名
	 */
	public static void clearAll(Context context){
		getPreference(context, prefName).edit().clear().commit();
	}
	
	/**
	 * 通过上下文对象得到sharePreferences对象
	 * 
	 * @param context 上下文对象
	 * @param prefName	sharePreferences文件名
	 * @return	sharePreferences对象
	 */
	private static SharedPreferences getPreference(Context context, String prefName){
		return context.getSharedPreferences(prefName, Context.MODE_PRIVATE);
	}
}
